home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
drdobbs
/
c_spec
/
execute
/
reargv.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-02-20
|
2KB
|
120 lines
#include <stdio.h>
#include <ctype.h>
#define MAXARGC (unsigned)128
#define isquote(c) ((c)=='"' || (c)=='\'')
extern char *getenv( char* );
extern char *malloc( unsigned );
/*----------------------------------------------------------------------*/
static char *nextarg( pp )
char **pp;
{
register char *p;
char *start;
register int term;
if( !*(p = *pp) ) /* No more args to get , return 0 */
return (char *) 0;
while( isspace(*p) ) /* Skip white space */
p++;
if( isquote(*p) ) /* Can't use a conditional because */
term = *p++; /* of order of evaluation problems */
else
term = ' ';
for( start = p; *p ; p++)
{
if( *p == term && *(p-1) != '\\' )
{
*p++ = '\0';
break;
}
}
*pp = p;
return start;
}
/*----------------------------------------------------------------------*/
int reargv( argcp, argvp )
char ***argvp;
int *argcp;
{
register int argc = 0 ;
register int maxc = MAXARGC ;
char **argv, **start_argv ;
char *env, *p ;
if( !(env = getenv("CMDLINE")) || !*env )
return 0;
if( !(p = malloc( strlen(env)+1 )))
return 0;
if( !(argv = (char **) malloc( MAXARGC * sizeof(char *)) ))
return 0;
strcpy(p, env);
start_argv = argv;
for( maxc=MAXARGC; --maxc >= 0 && (*argv++ = nextarg(&p)); argc++)
;
if( maxc < 0 )
fprintf(stderr, "Command line truncated\n");
*argcp = argc;
*argvp = start_argv;
return 1;
}
/*----------------------------------------------------------------------*/
switchar()
{
/* Returns the first character in the SWITCHAR environment
* if one is defined, else returns '-'.
*/
register char *env;
if( !(env = getenv("SWITCHAR")) || !*env )
return '-';
else
return *env ;
}
/*----------------------------------------------------------------------*/
#ifdef DEBUG
main( argc, argv )
char **argv;
{
printf("Original command line is: |");
while( --argc >= 0 )
printf("%s|", *argv++ );
if( !reargv( &argc, &argv ) )
printf("\nCMDLINE not present\n");
else
{
printf("New argc = %d\n", argc );
printf("\nModified command line is: |");
while( --argc >= 0 )
printf("%s|", *argv++ );
printf("\n");
}
}
#endif